He notado que es lo mismo si se usa este atributo o no. ¿Me equivoco?
Como ejemplo:
[Route("[controller]")] [ApiController] public class DataTablesController: ControllerBase { [HttpGet] public IActionResult Test() { return Ok("test"); } } No sucedió nada cuando eliminé el atributo [ApiController] .
En la documentación de Microsoft, encontré esta explicación:
Indica que un tipo y todos los tipos derivados se utilizan para servir respuestas de la API HTTP.
Los controladores decorados con este atributo están configurados con funciones y comportamientos destinados a mejorar la experiencia del desarrollador para crear API.
Cuando se decoran en un ensamblaje, todos los controladores del ensamblaje se tratarán como controladores con comportamiento de API.
¿Cuál es ese comportamiento de la API? ¿Y por qué debemos usarlo?
El atributo [ApiController] habilita algunas funciones, incluido el requisito de enrutamiento de atributos, la validación automática del modelo y la inferencia de parámetros de origen vinculante.
Esto se tomó directamente de los documentos de MS Crear API web con ASP.NET Core :
El atributo [ApiController] se puede aplicar a una clase de controlador para habilitar los siguientes comportamientos obstinados específicos de la API:
- Requisito de enrutamiento de atributos
- Respuestas HTTP 400 automáticas
- Inferencia de parámetros de origen de enlace
- Inferencia de solicitud de datos de formulario/multiparte
- Detalles del problema para códigos de estado de error
La función Detalles del problema para los códigos de estado de error requiere una versión de compatibilidad de 2.2 o posterior. Las otras características requieren una versión de compatibilidad de 2.1 o posterior.
Algunos detalles sobre las características a continuación:
Enrutamiento de atributos
Se requerirá el enrutamiento de atributos si usa [ApiController] , por ejemplo:
[ApiController] [Route("[controller]")] public class DataTablesController: ControllerBaseLas acciones son inaccesibles a través de rutas convencionales definidas por UseEndpoints, UseMvc o UseMvcWithDefaultRoute en Startup.Configure
Respuestas automáticas Http 400
Agrega un filtro de acción para devolver una respuesta 400 si ModelState falla en la validación. Ya no necesita escribir esto en sus acciones, se manejará automáticamente:
if (!ModelState.IsValid) { return BadRequest(ModelState); }Inferencia de parámetros de origen de enlace
Nuevamente, de los documentos vinculados:
Un atributo de origen de enlace define la ubicación en la que se encuentra el valor de un parámetro de acción. Existen los siguientes atributos de origen de enlace:
[FromBody],[FromForm],[FromHeader],[FromQuery],[FromRoute],[FromServices]
Inferencia de solicitud de datos de formulario/multiparte
El atributo [ApiController] aplica una regla de inferencia cuando un parámetro de acción se anota con el atributo [FromForm]. Se deduce el tipo de contenido de solicitud de datos de formulario/multiparte.
Un ejemplo que utiliza la inferencia de parámetros de origen vinculante:
[HttpPost] public IActionResult Test([FromForm] Model model) { return Ok("test"); }